From: Benjamin Otte Date: Sun, 15 Jan 2012 01:53:39 +0000 (+0100) Subject: css: Make border-width a length property X-Git-Tag: archive/raspbian/3.24.39-1+rpi1~1^2~65^2~39^2~18201 X-Git-Url: https://dgit.raspbian.org/%22http://www.example.com/cgi/%22/%22http:/www.example.com/cgi/%22?a=commitdiff_plain;h=762ea4793fa7891a7973287fad25af8bb69c8de4;p=gtk%2B3.0.git css: Make border-width a length property --- diff --git a/gtk/gtk-default.css b/gtk/gtk-default.css index de3e95cdaf..9a7fe4e439 100644 --- a/gtk/gtk-default.css +++ b/gtk/gtk-default.css @@ -121,7 +121,7 @@ GtkTreeView.view.expander:selected:prelight { background-color: alpha (@fg_color, 0.25); border-color: @fg_color; border-style: solid; - border-width: 1; + border-width: 1px; } .tooltip, @@ -129,14 +129,14 @@ GtkTreeView.view.expander:selected:prelight { background-color: @tooltip_bg_color; color: @tooltip_fg_color; border-color: @tooltip_fg_color; - border-width: 1; + border-width: 1px; border-style: solid; } .button, .slider { border-style: outset; - border-width: 2; + border-width: 2px; } .button:active { @@ -154,13 +154,13 @@ GtkTreeView.view.expander:selected:prelight { .trough { background-color: darker (@bg_color); border-style: inset; - border-width: 1; + border-width: 1px; padding: 0; } .entry { border-style: inset; - border-width: 2; + border-width: 2px; background-color: @base_color; color: @text_color; } @@ -181,7 +181,7 @@ GtkTreeView.view.expander:selected:prelight { border-color: shade (@selected_bg_color, 0.7); color: @selected_fg_color; border-style: outset; - border-width: 1; + border-width: 1px; } GtkCheckButton:hover, @@ -195,7 +195,7 @@ GtkRadioButton:selected { .cell.check, .cell.radio, .cell.check:hover, .cell.radio:hover { border-style: solid; - border-width: 1; + border-width: 1px; background-color: @base_color; border-color: @fg_color; } @@ -225,22 +225,22 @@ GtkRadioButton:selected { .popup { border-style: outset; - border-width: 1; + border-width: 1px; } .viewport { border-style: inset; - border-width: 2; + border-width: 2px; } .notebook { border-style: outset; - border-width: 1; + border-width: 1px; } .frame { border-style: inset; - border-width: 1; + border-width: 1px; } GtkScrolledWindow.frame { @@ -251,7 +251,7 @@ GtkScrolledWindow.frame { .menubar, .toolbar { border-style: outset; - border-width: 1; + border-width: 1px; } .menu:hover, @@ -264,7 +264,7 @@ GtkScrolledWindow.frame { } GtkSpinButton.button { - border-width: 1; + border-width: 1px; } .scale.slider:hover, @@ -330,7 +330,7 @@ GtkLabel:selected:focused { color: #fff; } GtkCalendar.view { - border-width: 1; + border-width: 1px; border-style: inset; padding: 1; } @@ -342,7 +342,7 @@ GtkCalendar.view:inconsistent { GtkCalendar.header { background-color: @bg_color; border-style: outset; - border-width: 2; + border-width: 2px; } GtkCalendar.highlight { diff --git a/gtk/gtk-win32.css b/gtk/gtk-win32.css index e5978b9b32..e1782fc941 100644 --- a/gtk/gtk-win32.css +++ b/gtk/gtk-win32.css @@ -240,7 +240,7 @@ .spinbutton.button, .spinbutton.button:focused { background-color: transparent; - border-width: 1 1 0 0; + border-width: 1px 1px 0 0; border-style: none; background-image: -gtk-win32-theme-part(spin, 1 1); color: rgba(0, 0, 0, 0); @@ -265,7 +265,7 @@ .spinbutton.button.bottom, .spinbutton.button.bottom:focused { - border-width: 0 1 1 0; + border-width: 0 1px 1px 0; background-image: -gtk-win32-theme-part(spin, 2 1); color: rgba(0, 0, 0, 0); } @@ -589,7 +589,7 @@ GtkComboBox.combobox-entry .button:insensitive { .notebook { background-color: transparent; - border-width: 1 3 2 2; + border-width: 1px 3px 2px 2px; border-style: solid; background-origin: padding-box; background-clip: border-box; diff --git a/gtk/gtkcssprovider.c b/gtk/gtkcssprovider.c index 927d345b68..dbbf92a00b 100644 --- a/gtk/gtkcssprovider.c +++ b/gtk/gtkcssprovider.c @@ -2792,7 +2792,6 @@ gtk_css_provider_get_default (void) if (G_UNLIKELY (!provider)) { - provider = gtk_css_provider_new (); if (!_gtk_css_provider_load_from_resource (provider, "/org/gtk/libgtk/gtk-default.css")) { diff --git a/gtk/gtkcssshorthandpropertyimpl.c b/gtk/gtkcssshorthandpropertyimpl.c index 467f34f332..d0aa8acd0f 100644 --- a/gtk/gtkcssshorthandpropertyimpl.c +++ b/gtk/gtkcssshorthandpropertyimpl.c @@ -80,6 +80,48 @@ parse_border_width (GtkCssShorthandProperty *shorthand, return TRUE; } +static gboolean +parse_border_width_really (GtkCssShorthandProperty *shorthand, + GValue *values, + GtkCssParser *parser, + GFile *base) +{ + GtkCssNumber numbers[4]; + guint i; + + for (i = 0; i < 4; i++) + { + if (!_gtk_css_parser_has_number (parser)) + break; + + if (!_gtk_css_parser_read_number (parser, + &numbers[i], + GTK_CSS_POSITIVE_ONLY + | GTK_CSS_NUMBER_AS_PIXELS + | GTK_CSS_PARSE_LENGTH)) + return FALSE; + } + + if (i == 0) + { + _gtk_css_parser_error (parser, "Expected a length"); + return FALSE; + } + + for (; i < 4; i++) + { + numbers[i] = numbers[(i - 1) >> 1]; + } + + for (i = 0; i < 4; i++) + { + g_value_init (&values[i], GTK_TYPE_CSS_NUMBER); + g_value_set_boxed (&values[i], &numbers[i]); + } + + return TRUE; +} + static gboolean parse_border_radius (GtkCssShorthandProperty *shorthand, GValue *values, @@ -269,16 +311,23 @@ parse_border_side (GtkCssShorthandProperty *shorthand, GtkCssParser *parser, GFile *base) { - int width; int style; do { if (!G_IS_VALUE (&values[0]) && - _gtk_css_parser_try_length (parser, &width)) + _gtk_css_parser_has_number (parser)) { - g_value_init (&values[0], G_TYPE_INT); - g_value_set_int (&values[0], width); + GtkCssNumber number; + if (!_gtk_css_parser_read_number (parser, + &number, + GTK_CSS_POSITIVE_ONLY + | GTK_CSS_NUMBER_AS_PIXELS + | GTK_CSS_PARSE_LENGTH)) + return FALSE; + + g_value_init (&values[0], GTK_TYPE_CSS_NUMBER); + g_value_set_boxed (&values[0], &number); } else if (!G_IS_VALUE (&values[1]) && _gtk_css_parser_try_enum (parser, GTK_TYPE_BORDER_STYLE, &style)) @@ -316,22 +365,29 @@ parse_border (GtkCssShorthandProperty *shorthand, GtkCssParser *parser, GFile *base) { - int width; int style; do { if (!G_IS_VALUE (&values[0]) && - _gtk_css_parser_try_length (parser, &width)) + _gtk_css_parser_has_number (parser)) { - g_value_init (&values[0], G_TYPE_INT); - g_value_init (&values[1], G_TYPE_INT); - g_value_init (&values[2], G_TYPE_INT); - g_value_init (&values[3], G_TYPE_INT); - g_value_set_int (&values[0], width); - g_value_set_int (&values[1], width); - g_value_set_int (&values[2], width); - g_value_set_int (&values[3], width); + GtkCssNumber number; + if (!_gtk_css_parser_read_number (parser, + &number, + GTK_CSS_POSITIVE_ONLY + | GTK_CSS_NUMBER_AS_PIXELS + | GTK_CSS_PARSE_LENGTH)) + return FALSE; + + g_value_init (&values[0], GTK_TYPE_CSS_NUMBER); + g_value_init (&values[1], GTK_TYPE_CSS_NUMBER); + g_value_init (&values[2], GTK_TYPE_CSS_NUMBER); + g_value_init (&values[3], GTK_TYPE_CSS_NUMBER); + g_value_set_boxed (&values[0], &number); + g_value_set_boxed (&values[1], &number); + g_value_set_boxed (&values[2], &number); + g_value_set_boxed (&values[3], &number); } else if (!G_IS_VALUE (&values[4]) && _gtk_css_parser_try_enum (parser, GTK_TYPE_BORDER_STYLE, &style)) @@ -843,7 +899,7 @@ _gtk_css_shorthand_property_init_properties (void) _gtk_css_shorthand_property_register ("border-width", GTK_TYPE_BORDER, border_width_subproperties, - parse_border_width, + parse_border_width_really, unpack_border, pack_border); _gtk_css_shorthand_property_register ("border-radius", diff --git a/gtk/gtkcssstylepropertyimpl.c b/gtk/gtkcssstylepropertyimpl.c index 7e71a9abe6..7f01fe4584 100644 --- a/gtk/gtkcssstylepropertyimpl.c +++ b/gtk/gtkcssstylepropertyimpl.c @@ -24,6 +24,7 @@ #include #include #include +#include #include "gtkcssparserprivate.h" #include "gtkcssstylefuncsprivate.h" @@ -33,6 +34,11 @@ #include "gtkprivatetypebuiltins.h" #include "gtkstylepropertiesprivate.h" +/* this is in case round() is not provided by the compiler, + * such as in the case of C89 compilers, like MSVC + */ +#include "fallback-c89.c" + /* the actual parsers we have */ #include "gtkanimationdescription.h" #include "gtkbindings.h" @@ -419,6 +425,25 @@ css_image_value_compute (GtkCssStyleProperty *property, g_value_take_object (computed, image); } +static gboolean +parse_border_width (GtkCssStyleProperty *property, + GValue *value, + GtkCssParser *parser, + GFile *base) +{ + GtkCssNumber number; + + if (!_gtk_css_parser_read_number (parser, + &number, + GTK_CSS_POSITIVE_ONLY + | GTK_CSS_NUMBER_AS_PIXELS + | GTK_CSS_PARSE_LENGTH)) + return FALSE; + + g_value_set_boxed (value, &number); + return TRUE; +} + static void compute_border_width (GtkCssStyleProperty *property, GValue *computed, @@ -427,6 +452,7 @@ compute_border_width (GtkCssStyleProperty *property, { GtkCssStyleProperty *style; GtkBorderStyle border_style; + GtkCssNumber number; /* The -1 is magic that is only true because we register the style * properties directly after the width properties. @@ -436,9 +462,15 @@ compute_border_width (GtkCssStyleProperty *property, if (border_style == GTK_BORDER_STYLE_NONE || border_style == GTK_BORDER_STYLE_HIDDEN) - g_value_set_int (computed, 0); - else - g_value_copy (specified, computed); + { + g_value_set_int (computed, 0); + return; + } + + _gtk_css_number_compute (&number, + g_value_get_boxed (specified), + context); + g_value_set_int (computed, round (number.value)); } static gboolean @@ -524,6 +556,7 @@ void _gtk_css_style_property_init_properties (void) { char *default_font_family[] = { "Sans", NULL }; + GtkCssNumber number; GtkSymbolicColor *symbolic; GtkCssBorderCornerRadius no_corner_radius = { 0, }; GtkBorder border_of_ones = { 1, 1, 1, 1 }; @@ -708,6 +741,7 @@ _gtk_css_style_property_init_properties (void) NULL, NULL, 0); + _gtk_css_number_init (&number, 0, GTK_CSS_PX); /* IMPORTANT: compute_border_width() requires that the border-width * properties be immeditaly followed by the border-style properties */ @@ -721,14 +755,14 @@ _gtk_css_style_property_init_properties (void) NULL, GTK_BORDER_STYLE_NONE); gtk_css_style_property_register ("border-top-width", - G_TYPE_INT, + GTK_TYPE_CSS_NUMBER, G_TYPE_INT, G_TYPE_INT, 0, - NULL, + parse_border_width, NULL, compute_border_width, - 0); + &number); gtk_css_style_property_register ("border-left-style", GTK_TYPE_BORDER_STYLE, GTK_TYPE_BORDER_STYLE, @@ -739,14 +773,14 @@ _gtk_css_style_property_init_properties (void) NULL, GTK_BORDER_STYLE_NONE); gtk_css_style_property_register ("border-left-width", - G_TYPE_INT, + GTK_TYPE_CSS_NUMBER, G_TYPE_INT, G_TYPE_INT, 0, - NULL, + parse_border_width, NULL, compute_border_width, - 0); + &number); gtk_css_style_property_register ("border-bottom-style", GTK_TYPE_BORDER_STYLE, GTK_TYPE_BORDER_STYLE, @@ -757,14 +791,14 @@ _gtk_css_style_property_init_properties (void) NULL, GTK_BORDER_STYLE_NONE); gtk_css_style_property_register ("border-bottom-width", - G_TYPE_INT, + GTK_TYPE_CSS_NUMBER, G_TYPE_INT, G_TYPE_INT, 0, - NULL, + parse_border_width, NULL, compute_border_width, - 0); + &number); gtk_css_style_property_register ("border-right-style", GTK_TYPE_BORDER_STYLE, GTK_TYPE_BORDER_STYLE, @@ -775,14 +809,14 @@ _gtk_css_style_property_init_properties (void) NULL, GTK_BORDER_STYLE_NONE); gtk_css_style_property_register ("border-right-width", - G_TYPE_INT, + GTK_TYPE_CSS_NUMBER, G_TYPE_INT, G_TYPE_INT, 0, - NULL, + parse_border_width, NULL, compute_border_width, - 0); + &number); gtk_css_style_property_register ("border-top-left-radius", GTK_TYPE_CSS_BORDER_CORNER_RADIUS, @@ -831,14 +865,14 @@ _gtk_css_style_property_init_properties (void) NULL, GTK_BORDER_STYLE_NONE); gtk_css_style_property_register ("outline-width", - G_TYPE_INT, + GTK_TYPE_CSS_NUMBER, G_TYPE_INT, G_TYPE_INT, 0, - NULL, + parse_border_width, NULL, compute_border_width, - 0); + &number); gtk_css_style_property_register ("outline-offset", G_TYPE_INT, G_TYPE_INT,